package biblio;

import java.io.Serializable;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Observable;


/**
 * Classe de gestion d'auteur.
 * @author IUT, par A. Chalumeau
 * @version 2.0
 * **/
 
public class Auteur extends Observable implements Serializable{

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private String _nomAuteur;
	private String _prenomAuteur;
	
	
	// Attributs d'Association
	private HashMap<String, Ouvrage> _tesOuvrages;
	
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur. 
	 * @param nomAuteur			nom de l'auteur
	 * @param prenomAuteur			prénom de l'auteur
	*/
	public Auteur(String nomAuteur, String prenomAuteur) {
		
		this.setnomAuteur(nomAuteur);
		this.setprenomAuteur(prenomAuteur);
		this.setOuvrage(new HashMap<String, Ouvrage>());
		

		
	} // Fin Constructeur

	// ************************************************************************************************************
	// M�thodes priv�es
	// ************************************************************************************************************
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs
	


	/**
	 * setter de l'attribut nomAuteur
	 * @param nomAuteur valeur à affecter au nom d'un auteur
	 */
	public void setnomAuteur(String nomAuteur){
		_nomAuteur = nomAuteur;
	}

	
	/**
	 * setter de l'attribut nomAuteur
	 * @param prenomAuteur valeur à affecter au prenom d'un auteur
	 */
	public void setprenomAuteur(String prenomAuteur){
		_prenomAuteur = prenomAuteur;
	}
	
	/**
	 * setter de l'attribut auteur
	 * @param auteur valeur � affecter � l'auteur de l'ouvrage
	 */
	public void setOuvrage(HashMap<String, Ouvrage> ouvrage){
		_tesOuvrages = ouvrage;
	}
	
		
	// ------------------------------------------------------------------------------------------------------------
	// Traitements


	// ************************************************************************************************************
	// Méthodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs
	
//	*********************************** OUVRAGES *******************

	/**
	 * getter de l'ouvrage.
	 * @return ouvrages de l'auteur
	 */
	public Ouvrage getOuvrage(String isbn) {
		return (Ouvrage)_tesOuvrages.get(isbn);
	} // Fin unOuvrage
	/**
	 * getter de l'ensemble des auteurs.
	 * @return une collection d'auteurs
	 */
	public Collection<Ouvrage> getOuvrages() {
		return _tesOuvrages.values();
	}
	
	/**
	 * getter du nombre d'exemplaires de l'ouvrage.
	 * @return un entier repr�sentant le nombre d'auteurs
	 */
	public int getNbOuvrages() {
		return _tesOuvrages.size();
	}
	
		
//	***************************************************************
	

	
	/**
	 * Getter du nom de l'auteur.
	 * @return nom de l'auteur
	 */
	public String getnomAuteur() {
		return _nomAuteur;
	}

	/**
	 * Getter du prenom de l'auteur.
	 * @return prenom de l'auteur
	 */
	public String getprenomAuteur() {
		return _prenomAuteur;
	}

	// ------------------------------------------------------------------------------------------------------------
	// Traitements
	

	/**
	 * @param ouvrage l'ouvrage � lier � l'auteur
	 */
	private void lierOuvrage(String isbn, Ouvrage ouvrages) {
		_tesOuvrages.put(isbn, ouvrages);
	} // Fin lierAuteur

	/**
	 * Ajout d'un ouvrage à l'auteur. 
	 */
	public void ajouter(String isbn, String titre, String editeur, GregorianCalendar dateParution ) {	
				
			// Creation de l'ouvrage
		Ouvrage ouvrage = new Ouvrage(isbn, titre, editeur, dateParution);
		
		// liaison de l'auteur a l'ouvrage
		this.lierOuvrage(isbn ,ouvrage);
		
	} // Fin ajouterOuvrage


} // Fin Classe Ouvrage